package v1

import (
	"github.com/gin-gonic/gin"
	"goblog/model"
	"goblog/utils/errmsg"
	"net/http"
	"strconv"
)

// 添加文章

func AddArticle(c *gin.Context) {
	var data model.Article
	_ = c.ShouldBindJSON(&data)

	code = model.CreateArt(&data)

	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"message": errmsg.GetErrMsg(code),
	}) //返回一个JSON
}

// 查询分类下的所有文章

func GetCateArt(c *gin.Context) {
	pageSize, _ := strconv.Atoi(c.Query("pagesize"))
	pageNum, _ := strconv.Atoi(c.Query("pagenum"))
	id, _ := strconv.Atoi(c.Param("id"))
	if pageSize == 0 { //如果Size = 0那就不要分页功能
		pageSize = -1 //-1就是Limit不做限制
	}
	if pageNum == 0 {
		pageNum = 1 //Offset偏移量也是-1不不偏移
	}
	data, code, total := model.GetCateArt(id, pageSize, pageNum)
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"total":   total,
		"message": errmsg.GetErrMsg(code), //输出这个字符串
	})
}

// 查询单个文章信息

func GetArtInfo(c *gin.Context) {
	id, _ := strconv.Atoi(c.Param("id"))
	data, code := model.GetArtInfo(id)
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"message": errmsg.GetErrMsg(code), //输出这个字符串
	})
}

//查询分类列表

func GetArt(c *gin.Context) {
	pageSize, _ := strconv.Atoi(c.Query("pagesize")) //用Query接收pageSize但是Query会接收成为String在User中pageSize是int所以要做一个类型转换
	pageNum, _ := strconv.Atoi(c.Query("pagenum"))   //因为strconv.Atoi还会返回一个string所以用_不接收string

	if pageSize == 0 { //如果Size = 0那就不要分页功能
		pageSize = -1 //-1就是Limit不做限制
	}
	if pageNum == 0 {
		pageNum = 1 //Offset偏移量也是-1不不偏移
	}
	data, code, total := model.GetArt(pageSize, pageNum) //用data去接收GetUsers其中Size和Num都是切片
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"total":   total,
		"message": errmsg.GetErrMsg(code), //输出这个字符串
	}) //返回一个JSON
}

// 编辑文章
//编辑用户时要先进行查询不能出现同名的情况

func EditArt(c *gin.Context) {
	var data model.Article
	_ = c.ShouldBindJSON(&data)
	id, _ := strconv.Atoi(c.Param("id")) //接收id

	code = model.EditArt(id, &data)
	c.JSON(http.StatusOK, gin.H{
		"status": code,
		//"data":    data,不用返回data
		"message": errmsg.GetErrMsg(code),
	}) //返回一个JSON)
}

// 删除文章

func DeleteArt(c *gin.Context) {
	id, _ := strconv.Atoi(c.Param("id"))
	code = model.DeleteArt(id)   // 接收再传入id
	c.JSON(http.StatusOK, gin.H{ //这里不用去if判断code直接JSON返回就好
		"status":  code,
		"message": errmsg.GetErrMsg(code),
	})
}
